<?php  
/*
* 名称: 数据库链接类
* 介绍: 适用于各种数据库链接
*/
class mysql {  
	public $_link;
	
	public function __construct($dbhost='localhost',$dbuser='root',$dbpassword='',$dbname='aivibo',$charset='utf8') {
		$this->_link = mysql_connect($dbhost,$dbuser,$dbpassword,true);  /*连接数据库*/ 
		$this->_link or $this->errmsg('无法连接MYSQL服务器！');  /*是否连接成功*/ 
		if ($this->version() > '4.1') {                  /*检查数据库版本*/ 
			$this->query('set names '.$charset);         /*设置数据库编码*/ 
		}  
		/*打开数据库*/
		mysql_select_db($dbname,$this->_link) or $this->errmsg('无法连接数据库！');  
	}  
	
	/*执行数据库操作*/ 
	public function query($sql)	{                                                               
		$result = mysql_query($sql,$this->_link);  
		$result or $this->errmsg('执行SQL语句错误！');  
		return $result;  
	} 
	 
	/*返回根据从结果集取得的行生成的数组*/ 
	/*MYSQL_BOTH 得到一个同时包含关联和数字索引的数组 (如同 mysql_fetch_array())*/ 
	/*MYSQL_ASSOC 得到一个同时包含关联和数字索引的数组 (如同 mysql_fetch_assoc())*/ 
	/*MYSQL_NUM 得到一个同时包含关联和数字索引的数组 (如同 mysql_fetch_row())*/ 
	public function fetch_array($result,$type = MYSQL_ASSOC) {

		$tmp = array();

		if($result){
			while($res =  mysql_fetch_array($result)){
				
				$tmp[] = $res;
			}
		}

		return $tmp;
	} 
	 
	/*返回根据所取得的行生成的对象*/ 
	public function fetch_object($result) {  
		return mysql_fetch_object($result);  
	} 
	 
	/*取得前一次 MySQL 操作所影响的记录行数*/ 
	public function affected_rows() {  
		return mysql_affected_rows($this->_link);  
	}  
	
	/* 释放结果内存*/ 
	public function free_result($result) {  
		return mysql_free_result($result);   
	}  
	
	/* 取得结果集中行的数目*/ 
	public function num_rows($result) {  
		return mysql_num_rows($result);  
	}
	  
	/* 取得结果集中字段的数目*/ 
	public function num_fields($result) {  
		return mysql_num_fields($result);  
	}  
	
	/*取得上一步 INSERT 操作产生的 ID*/ 
	public function insert_id() {  
		return mysql_insert_id($this->_link);  
	} 
	 
	/* 发出mysql执行错误*/ 
	private function errmsg($msg) {  
		$message  = '<strong>一个MySQL错误发生！</strong><br />';  
		$message .= '<strong>错误号：</strong>'. mysql_errno($this->_link) .'<br />';  
		$message .= '<strong>错误描述：</strong>'. $msg . mysql_error($this->_link) .'<br />';  
		$message .= '<strong>错误时间：</strong>'. date('Y-m-d H:i:s');  
		exit($message);  
	} 
	 
	/*返回连接的标识*/ 
	public function link_id() {  
		return $this->_link;  
	}
	  
	/*返回数据库服务器版本*/ 
	public function version() {  
		return mysql_get_server_info($this->_link);  
	}  
	
	/*获得客户端真实的IP地址*/ 
	function getip() {  
		if(getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) {  
			$ip = getenv("HTTP_CLIENT_IP");  
		}elseif(getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) {  
			$ip = getenv("HTTP_X_FORWARDED_FOR");  
		}elseif(getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) {  
			$ip = getenv("REMOTE_ADDR");  
		}elseif(isset ($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) {  				$ip = "unknown";  

			$ip = $_SERVER['REMOTE_ADDR'];  
		}else{  
		}  
		return ($ip);  
	}  
} 
?>